package com.vca.service.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.vca.common.model.system.SystemGroupData;
import com.vca.common.request.PageParamRequest;
import com.vca.common.request.SystemGroupDataRequest;
import com.vca.common.request.SystemGroupDataSearchRequest;
import com.vca.common.vo.MyRecord;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * SystemGroupDataService 接口
 */
public interface SystemGroupDataService extends IService<SystemGroupData> {

    /**
     * 分页组合数据详情
     * @param request 搜索条件
     * @param pageParamRequest 分页参数
     */
    List<SystemGroupData> getList(SystemGroupDataSearchRequest request, PageParamRequest pageParamRequest);

    /**
     * 新增组合数据详情
     * @param systemGroupDataRequest SystemFormCheckRequest 新增参数
     */
    Boolean create(SystemGroupDataRequest systemGroupDataRequest);

    /**
     * 修改组合数据详情表
     * @param id integer id
     * @param request 修改参数
     */
    Boolean update(Integer id, SystemGroupDataRequest request);

    /**
     * 通过gid获取列表 推荐二开使用
     * @param gid Integer group id
     * @return List<T>
     */
    <T> List<T> getListByGid(Integer gid, Class<T> cls);

    List<HashMap<String, Object>> getListMapByGid(Integer gid);

    List<HashMap<String, Object>> getListMapByGid(Integer gid,String language);

    List<HashMap<String, Object>> getListMapByGidAll(String language,Integer gid, Boolean isDeleted);

    HashMap<String, Object> getMapByGid(Integer gid, Integer keyId);

    /**
     * 通过gid获取列表
     * @param groupDataId Integer group id
     * @return <T>
     */
    <T> T getNormalInfo(Integer groupDataId, Class<T> cls);

    /**
     * 获取个人中心菜单
     * @return HashMap<String, Object>
     */
    HashMap<String, Object> getMenuUser();

    /**
     * 获取列表通过gid
     * @param gid gid
     * @return 列表
     */
    List<SystemGroupData> findListByGid(Integer gid);

    /**
     * 删除通过gid
     * @param gid gid
     * @return Boolean
     */
    Boolean deleteByGid(Integer gid);

    /**
    * @Description:获取首页配置
    * @Author: chenBing
    * @Date: 2022/9/19
    */
    HashMap<String, Object> getIndexConfig();

    /**
    * @Description:获取课程过滤参数
    * @Author: chenBing
    * @Date: 2022/9/19
    */
    HashMap<String, Object> getCourseConfig(String language);

    /**
     * @Description:获取首页配置信息
     * @Author: Li
     * @Date: 2022/10/25 10:57
     */
    HashMap<String, Object> getConfig(String language);

    /**
     * 获得课程后台配置
     * @return
     * @author Li
     * @date 2022/11/11 10:39
     */
    Map<String,List<HashMap<String, Object>>> getCourseAdminConfig();

    /**
     * 获得课程后台配置
     * @return
     * @author Li
     * @date 2022/11/11 10:39
     */
    Map<String,List<HashMap<String, Object>>> getCourseAdminConfigAll();

    /**
     * 获得课程后台配置
     * @return
     * @author Li
     * @date 2022/11/11 10:39
     */
    Map<String, List> getCourseSchedulingAdminConfig();

    /**
     * 获取礼品卡编号
     * @author Li
     * @date 2022/11/24 10:14
     * @return
     */
    Map<String,List> getCardList();

    /**
     * @description 获取关于配置信息和关于列表
     * @author Li
     * @date 2022/12/9 14:38
     * @return java.util.Map<java.lang.String,java.util.List>
     */
    Map<String,Object> getAboutList(String language);

    /**
     * @description 小程序常见问题
     * @author Li
     * @date 2022/12/9 15:16
     * @return java.util.Map<java.lang.String,java.util.List>
     */
    Map<String,List> getFqa(String language);

    /**
     * @description 小程序隐私条款
     * @author Li
     * @date 2022/12/9 15:26
     * @return java.util.Map<java.lang.String,java.util.List>
     */
    Map<String,List> getPrivacyPolicy(String language);

    /**
     * @description 根据id去逻辑删除
     * @methodName del
     * * @param id
     * @author Li
     * @date 2023/1/3 14:34
     * @return boolean
     */
    boolean del(Integer id);

    /**
    * @description 条款细则
    * @author Li
    * @date 2023/2/16 11:06
    * @return {@link Map}<{@link String},{@link Object}>
    */
    Map<String,Object> getTermsConditions(String language);

    Map<String,Object> birthstone(String language);
}